import request from '@/utils/request';
import type { BaseTreeModel, TreeNodeModel, ResponseBaseData } from '@/api/model/baseModel';

export const basePath = '/appsys/auth/AuthRest/';

/** 菜单表 */
export interface SysMenuDto extends BaseTreeModel {
  /** 应用ID */
  sysApplicationId?: string;
  /** 菜单CODE */
  code?: string;
  /** 图标引用地址 */
  image?: string;
  /** 路径 */
  url?: string;
  /** 父菜单 */
  parentId?: string;
  /** 排序 */
  orderBy?: number;
  /** 菜单类型  0  根节点，1功能菜单，2门户小页  */
  type?: string;
  /** 样式针对门户小页 */
  css?: string;
  /** 高度针对门户小页 */
  height?: string;
  /** 是否有滚动条针对门户小页 */
  scroll?: string;
  /** 刷新频率针对门户小页 */
  refresh?: string;
  /** 是否有关闭按钮针对门户小页 */
  isclose?: string;
  /** 状态1启用，0禁用 */
  status?: string;
  /** 扩展字段 */
  attribute01?: string;
  /** 扩展字段 */
  attribute02?: string;
  /** 扩展字段 */
  attribute03?: string;
  /** 扩展字段 */
  attribute04?: string;
  /** 扩展字段 */
  attribute05?: string;
  /** 扩展字段 */
  attribute06?: string;
  /** 扩展字段 */
  attribute07?: string;
  /** 扩展字段 */
  attribute08?: string;
  /** 扩展字段 */
  attribute09?: string;
  /** 扩展字段 */
  attribute10?: string;
  /** 菜单所属分组 */
  menuGroup?: string;
  /** 是否显示标题 */
  isshowtitle?: string;
  /** 是否允许拖拽 */
  isdrag?: string;
  /** 其它跳转URL */
  moreurl?: string;
  /** IS_ROBBIN */
  isRobbin?: string;
  /** MENU_VIEW */
  menuView?: string;
  /** bootstrap图标 */
  iconClass?: string;
  /** 是否为菜单还是资源 */
  ismenu?: string;
}

/**
 * 获取树数据
 * @param searchText 搜索值
 * @param menuType  菜单类型 0 后台菜单 1 前台菜单
 * @returns 菜单树数据
 */
export function getMenuTree(searchText: string, menuType: string): Promise<ResponseBaseData<TreeNodeModel>> {
  return request.get(`${basePath}getMenuTree/${menuType}?searchText=${searchText}`);
}

/**
 * 获取角色数据
 * @param id 菜单树id
 * @returns
 */
export function getAuthRestRoleList(id: string, searchText: string): Promise<ResponseBaseData<TreeNodeModel>> {
  return request.get(`${basePath}roleList/v1/${id}?searchText=${searchText}`);
}

/**
 * 角色添加
 * @param id 菜单树id
 * @param roleIdList 角色id
 * @returns
 */
export function addMenuRoles(id: string, roleIdList: string[]): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}addAuthRoles/v1/${id}`, { roleIdList });
}

/**
 * 删除角色数据
 * @param id 菜单树id
 * @param roleIdList 角色id
 * @returns
 */
export function delSysRole(id: string, roleIdList: string[]): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}rmAuthRoles/v1/${id}`, { roleIdList });
}

/**
 * 角色授权
 * @param id 菜单树id
 * @param roleIdList 角色id
 * @returns
 */
export function addAuthRoles(id: string, roleIdList: string[]): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}addAuthRoles/v1/${id}`, { roleIdList });
}

/**
 * 角色禁止
 * @param id 菜单树id
 * @param roleIdList 角色id
 * @returns
 */
export function denyAuthRoles(id: string, roleIdList: string[]): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}denyAuthRoles/v1/${id}`, { roleIdList });
}

/**
 * 获取树菜单权限
 * @param id 菜单树id
 * @param menuType  菜单类型 0 后台菜单 1 前台菜单
 * @returns
 */
export function getMenuAuthTree(id: string, menuType: string): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}menuAuthTree/v1/${menuType}`, id);
}

/**
 * 树菜单权限授权
 * @param roleId 角色id
 * @param menuIds 选择的菜单树id
 * @returns
 */
export function addAuthMenu(roleId: string, menuIds: string): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}addAuthMenu/v1`, { roleId, menuIds });
}

/**
 * 树菜单权限禁止
 * @param roleId 角色id
 * @param menuIds 选择的菜单树id
 * @returns
 */
export function denyAuthMenu(roleId: string, menuIds: string): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}denyAuthMenu/v1`, { roleId, menuIds });
}

/**
 * 树菜单权限移除
 * @param roleId 角色id
 * @param menuIds 选择的菜单树id
 * @returns
 */
export function removeAuthMenu(roleId: string, menuIds: string): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}rmAuthMenu/v1`, { roleId, menuIds });
}

/**
 * 获取树菜单组件权限列表
 * @param roleId 角色id
 * @param menuId 菜单树id
 * @returns
 */
export function getMenuAuthColumnList(roleId: string, menuId: string): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}menuAuthColumnList/v1`, { roleId, menuId });
}

/**
 * 树菜单组件权限授权
 * @param roleId 角色id
 * @param ids 选择列的id集合
 * @returns
 */
export function addAuthColumn(roleId: string, ids: string[]): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}addAuthColumn/v1/${roleId}`, ids);
}

/**
 * 树菜单组件权限禁止
 * @param roleId 角色id
 * @param ids 选择列的id集合
 * @returns
 */
export function denyAuthColumn(roleId: string, ids: string[]): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}denyAuthColumn/v1/${roleId}`, ids);
}

/**
 * 树菜单组件权限移除
 * @param roleId 角色id
 * @param ids 选择列的id集合
 * @returns
 */
export function removeAuthColumn(roleId: string, ids: string[]): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}rmAuthColumn/v1/${roleId}`, ids);
}
